package advancedFeatures;

/**
 * 类型擦除概念演示
 * Java泛型是通过类型擦除实现的，在运行时泛型类型会被替换为原始类型
 */
public class TypeErasure {
    // 泛型类示例
    public static class GenericClass<T> {
        private T data;
        
        public void setData(T data) {
            this.data = data;
        }
        
        public T getData() {
            return data;
        }
    }
    
    // 类型擦除后等同于：
    public static class RawClass {
        private Object data;
        
        public void setData(Object data) {
            this.data = data;
        }
        
        public Object getData() {
            return data;
        }
    }
    
    public static void main(String[] args) {
        // 在运行时，这两个实例的类型信息是相同的
        GenericClass<String> stringGeneric = new GenericClass<>();
        GenericClass<Integer> integerGeneric = new GenericClass<>();
        
        System.out.println("stringGeneric的类型：" + stringGeneric.getClass());
        System.out.println("integerGeneric的类型：" + integerGeneric.getClass());
        System.out.println("两个实例是否是同一个类：" + 
            (stringGeneric.getClass() == integerGeneric.getClass()));
    }
} 